package sma.agents.channels;

import javax.vecmath.Vector2d;

import org.janusproject.kernel.address.AgentAddress;
import org.janusproject.kernel.channels.Channel;

import sma.agents.listeners.DeleteListener;
import sma.agents.listeners.MoveListener;
import sma.agents.bodies.CircleBody;
import sma.agents.bodies.DecisiveAgentBody;

/**
 * Le channel exploité par tous les rôles. A chaque déplacement ils l'utilisent 
 * pour indiquer leur nouvelle position à l'IHM
 * @author Etienne Sainton
 * @since 0.2
 */
public interface GuiChannel extends Channel {

	/** Add listener on movements
	 * 
	 * @param listener ajoute un écouteur sur cet event
	 */
	public void addMoveListener(MoveListener listener);
	
	/** Remove listener on movements
	 * 
	 * @param listener supprime un écouteur
	 */
	public void removeMoveListener(MoveListener listener);
	
	/** Add listener on movements
	 * 
	 * @param listener ajoute un écouteur sur cet event
	 */
	public void addDeleteListener(DeleteListener listener);
	
	/** Remove listener on movements
	 * 
	 * @param listener supprime un écouteur
	 */
	public void removeDeleteListener(DeleteListener listener);
	
	/**
	 * @param adress l'adresse de l'agent, sera utile dans l'IHM puisqu'ils sont mappés
	 * @param body : le corps de l'agent
	 */
	public void move(AgentAddress adress, CircleBody body);
		
	/**
	 * 
	 * @param adress l' adresse de l' agent à supprimer
	 */
	public void onDeleteAgent(AgentAddress adress);
	
	/**
	 * 
	 */
	public void deleteAgent();
	

}